﻿using System.Data;
using System.Data.Linq;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System;
using ESMOffline;
using System.Data.Linq.Mapping;
using System.Configuration;

namespace EvaluationSettings
{
    /// <summary>
    /// Objeto que almacena la informacion y parametrizacion de la evaluacio para ESM
    /// </summary>
    public class CEvaluacion
    {
        #region Propiedades Privadas y Publicas

        private ESMDataSet db = new ESMDataSet();
        private CConexion cn = new CConexion();

        private string _error;

        public string Error
        {
            get { return _error; }
        }

        ESMDataSet.dbo_AmbientesDataTable _ds_ambientes = null;

        /// <summary>
        /// Almacena el valor que indica que la evaluacion sera presentada por un estudiante privada
        /// </summary>
        private bool _estudiantes = false;
        /// <summary>
        /// Almacena el valor que indica que la evaluacion sera presentada por un estudiante publica
        /// </summary>
        public bool Estudiantes
        {
            get { return _estudiantes; }
            set { _estudiantes = value; }
        }
        /// <summary>
        /// Almacena el valor que indica que la evaluacion sera presentada por un docente privada
        /// </summary>
        private bool _docentes = false;
        /// <summary>
        /// Almacena el valor que indica que la evaluacion sera presentada por un Docente publica
        /// </summary>
        public bool Docentes
        {
            get { return _docentes; }
            set { _docentes = value; }
        }
        /// <summary>
        /// Almacena el valor que indica que la evaluacion sera presentada por una Secretaria de Educacion privada
        /// </summary>
        private bool _secretariaEducacion = false;
        /// <summary>
        /// Almacena el valor que indica que la evaluacion sera presentada por una Secretaria de Educacion Publica
        /// </summary>
        public bool SecretariaEducacion
        {
            get { return _secretariaEducacion; }
            set { _secretariaEducacion = value; }
        }
        /// <summary>
        /// Almacena el valor que indica que la evaluacion sera presentada por un Padre privada
        /// </summary>
        private bool _padres = false;
        /// <summary>
        /// Almacena el valor que indica que la evaluacion sera presentada por un Padre Publica
        /// </summary>
        public bool Padres
        {
            get { return _padres; }
            set { _padres = value; }
        }
        /// <summary>
        /// Almacena el valor que indica que la evaluacion sera presentada por un Profesional privada
        /// </summary>
        private bool _profesional = false;
        /// <summary>
        /// Almacena el valor que indica que la evaluacion sera presentada por un Profesioanl publica
        /// </summary>
        public bool Profesional
        {
            get { return _profesional; }
            set { _profesional = value; }
        }
        /// <summary>
        /// Almacena el valor que indica que la evaluacion sera presentada por un Directivo privada
        /// </summary>
        private bool _directivos;
        /// <summary>
        /// Almacena el valor que indica que la evaluacion sera presentada por un Directivo publica
        /// </summary>
        public bool Directivos
        {
            get { return _directivos; }
            set { _directivos = value; }
        }

        private int _idEvaluacion;

        public int IdEvaluacion
        {
            get { return _idEvaluacion; }
        }

        #endregion

        #region Constructor
        /// <summary>
        /// Constructor de la Clase CEvaluacion
        /// </summary>
        public CEvaluacion()
        {
            cn.Conectar();
        }
        #endregion

        #region Proceso de carga para una evaluación Nueva
        /// <summary>
        /// Obtiene Evaluacion basado en el metodo ObtenerEvaluacion()
        /// </summary>
        /// <returns>IQueryable con la informacion de la evaluacion segun el actor seleccionado</returns>
        public List<IEnumerable<ESMDataSet.dbo_PreguntasRow>> LoadEvaluation()
        {
            return ObtenerEvaluacion();
        }

        /// <summary>
        /// Obtiene la coleccion de preguntas que se va a mostrar para cada uno de los actores
        /// </summary>
        /// <returns>Coleccion de preguntas para el actor deseado</returns>
        private List<IEnumerable<ESMDataSet.dbo_PreguntasRow>> ObtenerEvaluacion()
        {
            try
            {
                _ds_ambientes = new ESMDataSet.dbo_AmbientesDataTable();
                ESMOffline.ESMDataSetTableAdapters.dbo_AmbientesTableAdapter objdbo_AmbientesTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_AmbientesTableAdapter();

                objdbo_AmbientesTableAdapter.Fill(_ds_ambientes);

                var rAmbientes = (from a in _ds_ambientes
                                  select new { a.IdAmbiente }).Distinct();

                //Valida si la evaluacion sera aplicada a Directivos
                if (_directivos)
                {
                    List<IEnumerable<ESMDataSet.dbo_PreguntasRow>> objlist = new List<IEnumerable<ESMDataSet.dbo_PreguntasRow>>();

                    foreach (var item in rAmbientes)
                    {
                        objlist.Add(PreguntasDirectivos(item.IdAmbiente));
                    }

                    return objlist;

                }

                //Valida si la evaluacion sera aplicada a Estudiantes
                if (_estudiantes)
                {
                    List<IEnumerable<ESMDataSet.dbo_PreguntasRow>> objlist = new List<IEnumerable<ESMDataSet.dbo_PreguntasRow>>();

                    foreach (var item in rAmbientes)
                    {
                        objlist.Add(PreguntasEstudiantes(item.IdAmbiente));
                    }

                    return objlist;
                }
                //Valida si la evaluacion sera aplicada a un Profesional de Campo
                else if (_profesional)
                {
                    List<IEnumerable<ESMDataSet.dbo_PreguntasRow>> objlist = new List<IEnumerable<ESMDataSet.dbo_PreguntasRow>>();

                    foreach (var item in rAmbientes)
                    {
                        objlist.Add(PreguntasProfesional(item.IdAmbiente));
                    }

                    return objlist;
                }

                //Valida si la evaluacion sera aplicada a Padres de Familia
                else if (_padres)
                {
                    List<IEnumerable<ESMDataSet.dbo_PreguntasRow>> objlist = new List<IEnumerable<ESMDataSet.dbo_PreguntasRow>>();

                    foreach (var item in rAmbientes)
                    {
                        objlist.Add(PreguntasPadres(item.IdAmbiente));
                    }

                    return objlist;
                }
                //Valida si la evaluacion sera aplicada a Docentes
                else if (_docentes)
                {
                    List<IEnumerable<ESMDataSet.dbo_PreguntasRow>> objlist = new List<IEnumerable<ESMDataSet.dbo_PreguntasRow>>();

                    foreach (var item in rAmbientes)
                    {
                        objlist.Add(PreguntasEducadores(item.IdAmbiente));
                    }
                    return objlist;
                }
                //Valida si la evaluacion sera aplicada a Ninguno
                else
                    return null;


            }
            /*En caso de presentar excepcion retorno una Iqueryable vacia o null*/
            catch (System.Exception) { return null; }
        }

        public IEnumerable<ESMDataSet.dbo_PreguntasRow> PreguntasEducadores(int idambiente)
        {
            try
            {
                var ds_preguntas = db.dbo_Preguntas;
                ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter objdbo_PreguntasTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter();
                objdbo_PreguntasTableAdapter.Fill(ds_preguntas);

                var ds_componentes = db.dbo_Componentes;
                ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter objdbo_ComponentesTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter();
                objdbo_ComponentesTableAdapter.Fill(ds_componentes);

                var ds_procesos = db.dbo_Procesos;
                ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter objdbo_ProcesosTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter();
                objdbo_ProcesosTableAdapter.Fill(ds_procesos);

                var ds_ambientes = _ds_ambientes;

                var rEvaluacion = from e in ds_preguntas
                                  join c in ds_componentes on e.IdComponente equals c.IdComponente
                                  join p in ds_procesos on c.IdProceso equals p.IdProceso
                                  join a in ds_ambientes on p.IdAmbiente equals a.IdAmbiente
                                  where a.IdAmbiente == idambiente && e.Docente == true
                                  select e;

                if (rEvaluacion.Count() != 0)
                    return rEvaluacion;
                else
                    return null;
            }
            catch (Exception) { return null; }

        }

        public IEnumerable<ESMDataSet.dbo_PreguntasRow> PreguntasEstudiantes(int idambiente)
        {
            try
            {

                var ds_ambientes = _ds_ambientes;

                var ds_procesos = db.dbo_Procesos;
                ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter objdbo_ProcesosTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter();
                objdbo_ProcesosTableAdapter.Fill(ds_procesos);

                var ds_componentes = db.dbo_Componentes;
                ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter objdbo_ComponentesTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter();
                objdbo_ComponentesTableAdapter.Fill(ds_componentes);

                var ds_preguntas = db.dbo_Preguntas;
                ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter objdbo_PreguntasTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter();
                objdbo_PreguntasTableAdapter.Fill(ds_preguntas);


                var rEvaluacion = from e in ds_preguntas
                                  join c in ds_componentes on e.IdComponente equals c.IdComponente
                                  join p in ds_procesos on c.IdProceso equals p.IdProceso
                                  join a in ds_ambientes on p.IdAmbiente equals a.IdAmbiente
                                  where a.IdAmbiente == idambiente && e.Estudiante == true
                                  select e;

                if (rEvaluacion.Count() != 0)
                    return rEvaluacion;
                else
                    return null;
            }
            catch (Exception) { return null; }

        }

        public IEnumerable<ESMDataSet.dbo_PreguntasRow> PreguntasPadres(int idambiente)
        {
            try
            {
                var ds_preguntas = db.dbo_Preguntas;
                ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter objdbo_PreguntasTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter();
                objdbo_PreguntasTableAdapter.Fill(ds_preguntas);

                var ds_componentes = db.dbo_Componentes;
                ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter objdbo_ComponentesTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter();
                objdbo_ComponentesTableAdapter.Fill(ds_componentes);

                var ds_procesos = db.dbo_Procesos;
                ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter objdbo_ProcesosTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter();
                objdbo_ProcesosTableAdapter.Fill(ds_procesos);

                var ds_ambientes = _ds_ambientes;

                var rEvaluacion = from e in ds_preguntas
                                  //where e.dbo_ComponentesRow.IdProcProceso.Ambiente.IdAmbiente == idambiente && e.Directivo == true
                                  join c in ds_componentes on e.IdComponente equals c.IdComponente
                                  join p in ds_procesos on c.IdProceso equals p.IdProceso
                                  join a in ds_ambientes on p.IdAmbiente equals a.IdAmbiente
                                  where a.IdAmbiente == idambiente && e.Padres == true
                                  select e;
                if (rEvaluacion.Count() != 0)
                    return rEvaluacion;
                else
                    return null;
            }
            catch (Exception) { return null; }

        }

        public IEnumerable<ESMDataSet.dbo_PreguntasRow> PreguntasDirectivos(int idambiente)
        {
            try
            {
                var ds_preguntas = db.dbo_Preguntas;
                ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter objdbo_PreguntasTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter();
                objdbo_PreguntasTableAdapter.Fill(ds_preguntas);

                var ds_componentes = db.dbo_Componentes;
                ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter objdbo_ComponentesTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter();
                objdbo_ComponentesTableAdapter.Fill(ds_componentes);

                var ds_procesos = db.dbo_Procesos;
                ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter objdbo_ProcesosTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter();
                objdbo_ProcesosTableAdapter.Fill(ds_procesos);

                var ds_ambientes = _ds_ambientes;

                var rEvaluacion = from e in ds_preguntas
                                  join c in ds_componentes on e.IdComponente equals c.IdComponente
                                  join p in ds_procesos on c.IdProceso equals p.IdProceso
                                  join a in ds_ambientes on p.IdAmbiente equals a.IdAmbiente
                                  where a.IdAmbiente == idambiente && e.Directivo == true
                                  select e;

                if (rEvaluacion.Count() != 0)
                    return rEvaluacion;
                else
                    return null;
            }
            catch (Exception) { return null; }

        }

        public IEnumerable<ESMDataSet.dbo_PreguntasRow> PreguntasProfesional(int idambiente)
        {
            try
            {
                var ds_preguntas = db.dbo_Preguntas;
                ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter objdbo_PreguntasTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter();
                objdbo_PreguntasTableAdapter.Fill(ds_preguntas);

                var ds_componentes = db.dbo_Componentes;
                ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter objdbo_ComponentesTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter();
                objdbo_ComponentesTableAdapter.Fill(ds_componentes);

                var ds_procesos = db.dbo_Procesos;
                ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter objdbo_ProcesosTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter();
                objdbo_ProcesosTableAdapter.Fill(ds_procesos);

                var ds_ambientes = _ds_ambientes;

                var rEvaluacion = from e in ds_preguntas
                                  join c in ds_componentes on e.IdComponente equals c.IdComponente
                                  join p in ds_procesos on c.IdProceso equals p.IdProceso
                                  join a in ds_ambientes on p.IdAmbiente equals a.IdAmbiente
                                  where a.IdAmbiente == idambiente && e.Profesional == true
                                  select e;

                if (rEvaluacion.Count() != 0)
                    return rEvaluacion;
                else
                    return null;
            }
            catch (Exception) { return null; }

        }

        #endregion

        #region Almacenamiento de resultados

        /// <summary>
        /// Inserta una coleccion de resultados basandose en un arreglo bidimensional 
        /// que requiere como parametro.
        /// </summary>
        /// <param name="ResultadosByPre">Colleccion del tipo object[,] que contiene los resultados obtenidos para la evaluacion</param>
        /// <param name="idEvaluacion">Id de la evaluacion  a la que pertenece la coleccion de resultados</param>
        /// <returns></returns>
        private bool InsertarResultados(object[,] ResultadosByPre, int idEvaluacion)
        {
            try
            {
                string query = "";
                /*Se Crea un clico for para recorrer una coleccion bidimencioal que 
                 *almacena la informacion que se obtubo luego de responder la evaluacion*/
                int resultadoid_last = 0;
                int idResultado = 1;
                for (int i = 0; i < ResultadosByPre.GetLength(0); i++)
                {
                    System.Diagnostics.Debug.Print(i.ToString() + " : Pregunta #" + ResultadosByPre[i, 0].ToString());

                    resultadoid_last = Get_Last_Id();


                    /*Instancio un nuevo elemento del tipo Resultados*/
                    if (ResultadosByPre[i, 1] != null)
                    {
                        if (ResultadosByPre[i, 2] != null && ResultadosByPre[i, 2].ToString() != "")
                            query = String.Format("INSERT INTO dbo_Resultados (IdResultados, IdPregunta, Valor, Sesiones, Pendiente, Create_) VALUES ({0}, {1}, {2}, {3}, {4},{5})", (resultadoid_last + 1).ToString(), Convert.ToInt32(ResultadosByPre[i, 0]), ResultadosByPre[i, 1], Convert.ToInt32(ResultadosByPre[i, 2]), ResultadosByPre[i, 3] == null ? false : true, 1);
                        else
                            query = String.Format("INSERT INTO dbo_Resultados (IdResultados, IdPregunta, Valor, Pendiente, Create_) VALUES ({0}, {1}, {2},{3},{4})", (resultadoid_last + 1).ToString(), Convert.ToInt32(ResultadosByPre[i, 0]), ResultadosByPre[i, 1], ResultadosByPre[i, 3] == null ? false : true, 1);
                    }
                    else
                    {
                        if (ResultadosByPre[i, 2] != null && ResultadosByPre[i, 2].ToString() != "")
                            query = String.Format("INSERT INTO dbo_Resultados (IdResultados, IdPregunta, Sesiones, Pendiente, Create_) VALUES ({0}, {1}, {2}, {3}, 1)", (resultadoid_last + 1).ToString(), Convert.ToInt32(ResultadosByPre[i, 0]), (bool)ResultadosByPre[i, 2], ResultadosByPre[i, 3] == null ? false : true);
                        else
                            query = String.Format("INSERT INTO dbo_Resultados (IdResultados, IdPregunta, Pendiente, Create_) VALUES ({0}, {1}, {2}, 1)", (resultadoid_last + 1).ToString(), Convert.ToInt32(ResultadosByPre[i, 0]), ResultadosByPre[i, 3] == null ? false : true);
                    }

                    cn.Conectar();
                    var result_resultado = cn.Ejecutar(query);

                    if (result_resultado == null)
                        return false;


                    /*Realizo el proceso de inserción para el objeto ResultadosByEvaluacion*/
                    var resultbyeval = cn.Ejecutar("SELECT MAX(IdResultadosbyPregunta) FROM dbo_ResultadosByEvaluacion");
                    query = String.Format("INSERT INTO dbo_ResultadosByEvaluacion (IdResultadosbyPregunta, IdEvaluacion, IdResultado) VALUES ({0}, {1}, {2})", (Convert.ToInt32(resultbyeval[0]) + 1).ToString(), (idEvaluacion + 1).ToString(), (resultadoid_last + 1));

                    var result_resultadobyeval = cn.Ejecutar(query);
                    if (result_resultadobyeval == null)
                        return false;


                    cn.Desconectar();

                    /*retorno un valor verdadero en caso de no presentar excepción de ningún tipo*/
                }
                return true;
            }
            /*En caso de presentar una excepción retorno un valor false*/
            catch (Exception) { return false; }
        }

        public int Get_Last_dbo_Resultados()
        {
            CConexion obj_cn = new CConexion();
            obj_cn.Conectar();
            var result = obj_cn.Ejecutar("SELECT MAX(IdResultados) FROM dbo_Resultados");
            obj_cn.Desconectar();

            return Convert.ToInt32(result[0]);
        }

        public bool InsertarResultadosParcial(object[,] Results, int eval)
        {
            return InsertarResultados(Results, eval);
        }

        #endregion

        #region Proceso de carga para una evaluación Existente
        public List<IEnumerable> LoadEvalParcial(int eval, int actor)
        {
            return LoadParcial(eval, actor);
        }

        public ESMDataSet.dbo_PreguntasRow ObtenerDatosPregunta(int idpregunta)
        {
            try
            {
                var ds_preguntas = new ESMDataSet.dbo_PreguntasDataTable();
                var da_preguntas = new ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter();

                da_preguntas.Fill(ds_preguntas);

                var pre = (from p in ds_preguntas
                           where p.IdOrden == idpregunta
                           select p).Single();

                return pre;
            }
            catch (Exception) { return null; }

        }

        protected List<IEnumerable> LoadParcial(int eval, int actor)
        {
            try
            {
                List<IEnumerable> objList = new List<IEnumerable>();

                _ds_ambientes = new ESMDataSet.dbo_AmbientesDataTable();
                ESMOffline.ESMDataSetTableAdapters.dbo_AmbientesTableAdapter objdbo_AmbientesTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_AmbientesTableAdapter();

                objdbo_AmbientesTableAdapter.Fill(_ds_ambientes);

                var rAmbientes = (from a in _ds_ambientes
                                  select new { a.IdAmbiente }).Distinct();

                switch (actor)
                {
                    case 1:
                        objList = new List<IEnumerable>();

                        foreach (var item in rAmbientes)
                        {
                            objList.Add(ParcialPreguntasEstudiantes(item.IdAmbiente));
                        }
                        break;
                    case 2:
                        objList = new List<IEnumerable>();

                        foreach (var item in rAmbientes)
                        {
                            objList.Add(ParcialPreguntasProfesionales(item.IdAmbiente));
                        }
                        break;
                    case 3:
                        objList = new List<IEnumerable>();

                        foreach (var item in rAmbientes)
                        {
                            objList.Add(ParcialPreguntasDocentes(item.IdAmbiente));
                        }
                        break;
                    case 4:
                        objList = new List<IEnumerable>();

                        foreach (var item in rAmbientes)
                        {
                            objList.Add(ParcialPreguntasPadres(item.IdAmbiente));
                        }
                        break;
                    case 6:
                        objList = new List<IEnumerable>();

                        foreach (var item in rAmbientes)
                        {
                            objList.Add(ParcialPreguntasDirectivos(item.IdAmbiente));
                        }
                        break;
                }

                return objList;


            }
            catch (Exception) { return null; }

        }

        public IEnumerable ParcialPreguntasEstudiantes(int idambiente)
        {
            try
            {

                var ds_ambientes = _ds_ambientes;

                var ds_procesos = db.dbo_Procesos;
                ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter objdbo_ProcesosTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter();
                objdbo_ProcesosTableAdapter.Fill(ds_procesos);

                var ds_componentes = db.dbo_Componentes;
                ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter objdbo_ComponentesTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter();
                objdbo_ComponentesTableAdapter.Fill(ds_componentes);

                var ds_preguntas = db.dbo_Preguntas;
                ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter objdbo_PreguntasTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter();
                objdbo_PreguntasTableAdapter.Fill(ds_preguntas);

                var preguntas = from e in ds_preguntas
                                join c in ds_componentes on e.IdComponente equals c.IdComponente
                                join p in ds_procesos on c.IdProceso equals p.IdProceso
                                join a in ds_ambientes on p.IdAmbiente equals a.IdAmbiente
                                where a.IdAmbiente == idambiente && e.Estudiante == true
                                select new
                                {
                                    e.IdOrden,
                                    e.IdPregunta,
                                    No_Pregunta = e.IdPregunta,
                                    Pregunta = e.Pregunta,
                                    e.Etiqueta
                                };

                return preguntas;
            }
            catch (Exception) { return null; }

        }

        public IEnumerable ParcialPreguntasProfesionales(int idambiente)
        {
            try
            {
                var ds_preguntas = db.dbo_Preguntas;
                ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter objdbo_PreguntasTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter();
                objdbo_PreguntasTableAdapter.Fill(ds_preguntas);

                var ds_componentes = db.dbo_Componentes;
                ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter objdbo_ComponentesTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter();
                objdbo_ComponentesTableAdapter.Fill(ds_componentes);

                var ds_procesos = db.dbo_Procesos;
                ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter objdbo_ProcesosTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter();
                objdbo_ProcesosTableAdapter.Fill(ds_procesos);

                var ds_ambientes = _ds_ambientes;

                var preguntas = from e in ds_preguntas
                                join c in ds_componentes on e.IdComponente equals c.IdComponente
                                join p in ds_procesos on c.IdProceso equals p.IdProceso
                                join a in ds_ambientes on p.IdAmbiente equals a.IdAmbiente
                                where a.IdAmbiente == idambiente && e.Profesional == true
                                select new
                                {
                                    e.IdOrden,
                                    e.IdPregunta,
                                    No_Pregunta = e.IdPregunta,
                                    Pregunta = e.Pregunta,
                                    e.Etiqueta
                                };

                return preguntas;
            }
            catch (Exception) { return null; }

        }

        public IEnumerable ParcialPreguntasPadres(int idambiente)
        {
            try
            {
                var ds_preguntas = db.dbo_Preguntas;
                ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter objdbo_PreguntasTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter();
                objdbo_PreguntasTableAdapter.Fill(ds_preguntas);

                var ds_componentes = db.dbo_Componentes;
                ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter objdbo_ComponentesTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter();
                objdbo_ComponentesTableAdapter.Fill(ds_componentes);

                var ds_procesos = db.dbo_Procesos;
                ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter objdbo_ProcesosTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter();
                objdbo_ProcesosTableAdapter.Fill(ds_procesos);

                var ds_ambientes = _ds_ambientes;

                var preguntas = from e in ds_preguntas
                                join c in ds_componentes on e.IdComponente equals c.IdComponente
                                join p in ds_procesos on c.IdProceso equals p.IdProceso
                                join a in ds_ambientes on p.IdAmbiente equals a.IdAmbiente
                                where a.IdAmbiente == idambiente && e.Padres == true
                                select new
                                {
                                    e.IdOrden,
                                    e.IdPregunta,
                                    No_Pregunta = e.IdPregunta,
                                    Pregunta = e.Pregunta,
                                    e.Etiqueta
                                };

                return preguntas;
            }
            catch (Exception) { return null; }

        }

        public IEnumerable ParcialPreguntasDocentes(int idambiente)
        {
            try
            {
                var ds_preguntas = db.dbo_Preguntas;
                ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter objdbo_PreguntasTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter();
                objdbo_PreguntasTableAdapter.Fill(ds_preguntas);

                var ds_componentes = db.dbo_Componentes;
                ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter objdbo_ComponentesTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter();
                objdbo_ComponentesTableAdapter.Fill(ds_componentes);

                var ds_procesos = db.dbo_Procesos;
                ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter objdbo_ProcesosTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter();
                objdbo_ProcesosTableAdapter.Fill(ds_procesos);

                var ds_ambientes = _ds_ambientes;

                var preguntas = from e in ds_preguntas
                                join c in ds_componentes on e.IdComponente equals c.IdComponente
                                join p in ds_procesos on c.IdProceso equals p.IdProceso
                                join a in ds_ambientes on p.IdAmbiente equals a.IdAmbiente
                                where a.IdAmbiente == idambiente && e.Docente == true
                                select new
                                {
                                    e.IdOrden,
                                    e.IdPregunta,
                                    No_Pregunta = e.IdPregunta,
                                    Pregunta = e.Pregunta,
                                    e.Etiqueta
                                };

                return preguntas;
            }
            catch (Exception) { return null; }

        }

        public IEnumerable ParcialPreguntasDirectivos(int idambiente)
        {
            try
            {
                var ds_preguntas = db.dbo_Preguntas;
                ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter objdbo_PreguntasTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_PreguntasTableAdapter();
                objdbo_PreguntasTableAdapter.Fill(ds_preguntas);

                var ds_componentes = db.dbo_Componentes;
                ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter objdbo_ComponentesTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ComponentesTableAdapter();
                objdbo_ComponentesTableAdapter.Fill(ds_componentes);

                var ds_procesos = db.dbo_Procesos;
                ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter objdbo_ProcesosTableAdapter = new ESMOffline.ESMDataSetTableAdapters.dbo_ProcesosTableAdapter();
                objdbo_ProcesosTableAdapter.Fill(ds_procesos);

                var ds_ambientes = _ds_ambientes;

                var preguntas = from e in ds_preguntas
                                join c in ds_componentes on e.IdComponente equals c.IdComponente
                                join p in ds_procesos on c.IdProceso equals p.IdProceso
                                join a in ds_ambientes on p.IdAmbiente equals a.IdAmbiente
                                where a.IdAmbiente == idambiente && e.Directivo == true
                                select new
                                {
                                    e.IdOrden,
                                    e.IdPregunta,
                                    No_Pregunta = e.IdPregunta,
                                    Pregunta = e.Pregunta,
                                    e.Etiqueta
                                };

                return preguntas;
            }
            catch (Exception) { return null; }

        }

        public IEnumerable ObtenerTopEvaluacion(int top, int idmedicion, int idie)
        {
            try
            {
                var ds_evaluacion = new ESMDataSet.dbo_EvaluacionDataTable();
                var da_evaluacion = new ESMOffline.ESMDataSetTableAdapters.dbo_EvaluacionTableAdapter();
                var ds_actores = new ESMDataSet.dbo_ActoresDataTable();
                var da_actores = new ESMOffline.ESMDataSetTableAdapters.dbo_ActoresTableAdapter();
                var ds_estadoeval = new ESMDataSet.dbo_EstadoEvaluacionDataTable();
                var da_estadoeval = new ESMOffline.ESMDataSetTableAdapters.dbo_EstadoEvaluacionTableAdapter();
                var ds_mediciones = new ESMDataSet.dbo_MedicionesDataTable();
                var da_mediciones = new ESMOffline.ESMDataSetTableAdapters.dbo_MedicionesTableAdapter();

                da_evaluacion.Fill(ds_evaluacion);
                da_actores.Fill(ds_actores);
                da_estadoeval.Fill(ds_estadoeval);
                da_mediciones.Fill(ds_mediciones);

                var evalbymedi = (from e in ds_evaluacion
                                  join a in ds_actores on e.IdActor equals a.IdActor
                                  join es in ds_estadoeval on e.IdEstado equals es.IdEstado
                                  join m in ds_mediciones on e.IdMedicion equals m.IdMedicion
                                  where e.IdMedicion == idmedicion && e.IdIE == idie
                                  select new { No_Evaluacion = e.IdEvaluacion, No_Actor = e.IdActor, Actor = a.Actor, Fecha = e.Fecha, Estado = es.Estado, Medicion = m.IdMedicion }).Take(top);

                return evalbymedi;
            }
            catch (Exception) { return null; }
        }
        #endregion

        //public IQueryable MedicionesIE(int IdIe)
        //{
        //    try
        //    {
        //        var medi = (from m in db.Evaluacions
        //                    where m.IdIE == IdIe
        //                    select new
        //                    {
        //                        Identificador = m.IdMedicion,
        //                        Evaluaciones = (from eva in db.Evaluacions where eva.IdIE == IdIe && eva.IdMedicion == m.IdMedicion select eva).Count(),
        //                        Fecha = m.Medicione.FechaMedicion
        //                    }).Distinct();

        //        if (medi.Count() != 0)
        //        {
        //            return medi;
        //        }
        //        else
        //        {
        //            return null;
        //        }

        //    }
        //    catch (Exception) { return null; }
        //}

        //public int CrearMedion()
        //{
        //    try
        //    {
        //        Medicione objMediciones = new Medicione
        //        {
        //            FechaMedicion = DateTime.Now
        //        };

        //        db.Mediciones.InsertOnSubmit(objMediciones);
        //        db.SubmitChanges();

        //        return objMediciones.IdMedicion;

        //    }
        //    catch (Exception) { return 0; }
        //}

        public bool ActualizarEvaluacion(object[,] VResultados, int ideval, bool estado)
        {
            try
            {

                var ds_results = db.dbo_ResultadosByEvaluacion;
                var da_results = new ESMOffline.ESMDataSetTableAdapters.dbo_ResultadosByEvaluacionTableAdapter();
                da_results.Fill(ds_results);

                var ds_resultados = db.dbo_Resultados;
                var da_resultados = new ESMOffline.ESMDataSetTableAdapters.dbo_ResultadosTableAdapter();
                da_resultados.Fill(ds_resultados);

                var results = from e in ds_results
                              where e.IdEvaluacion == ideval
                              select e;

                int contvector = 0;

                int resultado_id_last = 0;
                int resultado_id_future = 1;

                for (int i = 0; i < VResultados.GetLength(0); i++)
                {
                    int contador = 0;

                    foreach (var item in results)
                    {
                        int idpregunta = 0;

                        if (VResultados[contvector, 0] != null)
                            idpregunta = Convert.ToInt32(VResultados[contvector, 0]);

                        if (idpregunta != 0)
                        {

                            ESMOffline.ESMDataSet.dbo_ResultadosRow col_resultados = (from rp in ds_resultados
                                                                                      join rs in ds_results on rp.IdResultados equals rs.IdResultado
                                                                                      where rs.IdResultado == item.IdResultado && rs.IdEvaluacion == item.IdEvaluacion
                                                                                      select rp).Single();


                            ArrayList valores = new ArrayList();

                            if (col_resultados.IdPregunta == idpregunta)
                            {
                                System.Diagnostics.Debug.Print("Id Resultado = " + col_resultados.IdResultados.ToString());
                                string sesiones = null;

                                if (VResultados[contvector, 2] != null && VResultados[contvector, 2].ToString() != "")
                                    sesiones = VResultados[contvector, 2].ToString();

                                if (VResultados[contvector, 1] != null)
                                {
                                    valores.Add(VResultados[contvector, 1]);
                                    valores.Add(sesiones);
                                    valores.Add(VResultados[contvector, 3]);
                                }
                                else
                                {
                                    valores.Add(null);
                                    valores.Add(sesiones);
                                    valores.Add(VResultados[contvector, 3]);
                                }

                                valores.Add(col_resultados.IdResultados);


                                if (valores.Count == 4)
                                {

                                    string query = String.Format("UPDATE dbo_Resultados SET dbo_Resultados.Valor = '{0}',  dbo_Resultados.Pendiente = {1}, dbo_Resultados.Sesiones = {2}, dbo_Resultados.Update = 1 WHERE dbo_Resultados.IdResultados = {3}", VResultados[contvector, 1] == null ? "" : valores[0], valores[2] == null ? "0" : "1", sesiones == null ? "0" : sesiones, valores[3].ToString());
                                    System.Windows.Forms.Application.DoEvents();
                                    cn.Ejecutar(query);

                                }
                                contador++;
                                break;

                            }
                        }

                    }
                    if (contador == 0)
                    {
                        ArrayList objresultado = new ArrayList();
                        int idpregunta = 0;

                        if (VResultados[contvector, 0] != null)
                            idpregunta = Convert.ToInt32(VResultados[contvector, 0]);

                        if (idpregunta != 0)
                        {
                            if (VResultados[contvector, 2] != null && VResultados[contvector, 2].ToString() != "")
                            {
                                if (VResultados[contvector, 1] != null)
                                {
                                    objresultado.Add(VResultados[contvector, 0]);
                                    objresultado.Add(VResultados[contvector, 1]);
                                    objresultado.Add(VResultados[contvector, 2]);
                                    objresultado.Add(VResultados[contvector, 3]);
                                }
                                else
                                {
                                    objresultado.Add(VResultados[contvector, 0]);
                                    objresultado.Add(null);
                                    objresultado.Add(null);
                                    objresultado.Add(null);

                                }
                            }
                            else
                            {
                                if (VResultados[contvector, 1] != null)
                                {
                                    objresultado.Add(VResultados[contvector, 0]);
                                    objresultado.Add(VResultados[contvector, 1]);
                                    objresultado.Add(null);
                                    objresultado.Add(VResultados[contvector, 3]);
                                }
                                else
                                {
                                    objresultado.Add(VResultados[contvector, 0]);
                                    objresultado.Add(null);
                                    objresultado.Add(null);
                                    objresultado.Add(null);
                                }
                            }
                            if (objresultado != null)
                            {
                                if (resultado_id_last != (resultado_id_future - 1))
                                {
                                    resultado_id_last = Get_Last_dbo_Resultados();
                                    string query_dbo_resultados = String.Format("INSERT INTO dbo_Resultados (IdResultados, IdPregunta, Valor, Pendiente, Sesiones, Create_) VALUES ({0} ,{1}, '{2}', {3}, {4} ,1)", (resultado_id_last + 1).ToString(), objresultado[0], objresultado[1], objresultado[2] == null ? false : true, objresultado[3] == null ? 0 : objresultado[3]);
                                    cn.Ejecutar(query_dbo_resultados);

                                    resultado_id_future = Get_Last_dbo_Resultados();
                                    string query_dbo_resultadosbyevaluacion = String.Format("INSERT INTO dbo_ResultadosByEvaluacion (IdResultadosByPregunta, IdResultado, IdEvaluacion, Create_) VALUES ({0},{1}, {2}, 1)", Get_Last_Id_ResultadosByEvaluacion(), resultado_id_future, ideval);
                                    cn.Ejecutar(query_dbo_resultadosbyevaluacion);
                                }
                            }
                        }
                    }
                    contvector++;
                }

                int estado_i = 0;

                if (estado)
                    estado_i = 2;
                else
                    estado_i = 1;

                string query_dbo_Evaluacion = "";

                if (estado_i != 0)
                {
                    query_dbo_Evaluacion = String.Format("UPDATE dbo_Evaluacion SET dbo_Evaluacion.IdEstado = {0}, dbo_Evaluacion.Fecha='{1}', dbo_Evaluacion.Update=1 WHERE dbo_Evaluacion.IdEvaluacion = {2}", estado_i, DateTime.Now.ToShortDateString(), ideval);

                    cn.Ejecutar(query_dbo_Evaluacion);
                }

                return true;
            }
            catch (Exception) { return false; }
        }

        #region Utilidades

        /// <summary>
        /// Obtiene el ultimo id de resultado ingresado para la pregunta correspondiente
        /// </summary>
        /// <returns></returns>
        public int Get_Last_Id()
        {
            try
            {
                CConexion objCConexion = new CConexion();
                ArrayList datos_retornados = new ArrayList();
                objCConexion.Conectar();
                string query = "SELECT max(IdResultados) FROM dbo_Resultados;";
                datos_retornados = objCConexion.Ejecutar(query);
                objCConexion.Desconectar();

                int resultadobyevaluacionid = Convert.ToInt32(datos_retornados[0]);

                return resultadobyevaluacionid;
            }
            catch (Exception) { return 0; }
        }

        /// <summary>
        /// Obtiene el ultimo id de resultado ingresado para la pregunta correspondiente
        /// </summary>
        /// <returns></returns>
        public int Get_Last_Id_Evaluacion()
        {
            try
            {
                CConexion objCConexion = new CConexion();
                ArrayList datos_retornados = new ArrayList();
                objCConexion.Conectar();
                string query = "SELECT max(IdEvaluacion) FROM dbo_Evaluacion;";
                datos_retornados = objCConexion.Ejecutar(query);
                objCConexion.Desconectar();

                int resultadobyevaluacionid = Convert.ToInt32(datos_retornados[0]);

                return resultadobyevaluacionid;
            }
            catch (Exception) { return 0; }
        }

        public int Get_Last_Id_ResultadosByEvaluacion()
        {
            try
            {
                CConexion objCConexion = new CConexion();
                ArrayList datos_retornados = new ArrayList();
                objCConexion.Conectar();
                string query = "SELECT max(IdResultado) FROM dbo_ResultadosByEvaluacion;";
                datos_retornados = objCConexion.Ejecutar(query);
                objCConexion.Desconectar();

                int resultadobyevaluacionid = Convert.ToInt32(datos_retornados[0]);

                return resultadobyevaluacionid;
            }
            catch (Exception) { return 0; }
        }

        /// <summary>
        /// Obtiene caracteristicas completas para un registro del tipo ESMDataSet.dbo_AyudaByPreguntaRow
        /// </summary>
        /// <param name="idpregunta">Identificador de Pregunta (No. Orden)</param>
        /// <returns>Registro correspondiente para el No. Orden respectivo</returns>
        public ESMDataSet.dbo_AyudaByPreguntaRow ObtenerAyudaPregunta(int idpregunta)
        {
            try
            {
                var ds_AyudaByPreguntas = db.dbo_AyudaByPregunta;
                var da_AyudaByPreguntas = new ESMOffline.ESMDataSetTableAdapters.dbo_AyudaByPreguntaTableAdapter();
                da_AyudaByPreguntas.Fill(ds_AyudaByPreguntas);

                var abp = (from a in ds_AyudaByPreguntas
                           where a.IdPregunta == idpregunta
                           select a).Single();

                return abp;
            }
            catch (Exception) { return null; }
        }

        /// <summary>
        /// Valida que la cantidad de evaluaciones en la tabla Evaluacion sea igual al
        /// numero de actores que existen en la tabla actores.
        /// </summary>
        /// <param name="idie">Identificador de Institucion Educativa por la que realizaremos
        ///  el proceso de busqueda.</param>
        protected bool ValidarGrupo(int idie, int idactor, int idmedicion)
        {
            try
            {

                var ds_Evaluacion = new ESMDataSet.dbo_EvaluacionDataTable();
                var ds_Actores = new ESMDataSet.dbo_ActoresDataTable();

                new ESMOffline.ESMDataSetTableAdapters.dbo_EvaluacionTableAdapter().Fill(ds_Evaluacion);
                new ESMOffline.ESMDataSetTableAdapters.dbo_ActoresTableAdapter().Fill(ds_Actores);
                ///TODO: JCCM: Revisar esta variable
                //Valido la cantidad de evaluaciones que hay para ese id de medicion consultado previamente
                int cantidad_eval = (from eval in ds_Evaluacion
                                     where eval.IdIE == idie && eval.IdMedicion == idmedicion
                                     select eval.IdActor).Count();


                /*Obtengo la cantidad de actores que existen en la tabla para comparar con la cantidad de
                 * evaluaciones realizadas en la institucion educativa*/
                int cantidad_actores = (from actor in ds_Actores
                                        where actor.IdRama != 1
                                        select actor.IdActor).Count();

                //Creo una variable para almacenar el resultado de la validacion realizada por el presente metodo
                bool result_valid = false;

                //Valido si la cantidad de las dos variables coincide
                switch (cantidad_actores == cantidad_eval)
                {
                    /*En caso de ser el resultado de la validacion true entonces adsigno a la valiable
                     *result_valid el valor true a retorar */
                    //case true: result_valid = true;
                    //    ESM.Model.Mediciones medi = new ESM.Model.Mediciones { FechaMedicion = DateTime.Now };
                    //    db.Mediciones.InsertOnSubmit(medi);
                    //    db.SubmitChanges();

                    ///TODO: JCMM: Consolidar Pendiente
                    ///
                    //var valid = from con in db.Consolidacion
                    //            where con.IdMedicion == idmedicion
                    //            select con;
                    //if (valid.Count() == 0)
                    //    ConsolidarEvaluaciones(Convert.ToInt32(id_ult_medicion));

                    //break;
                    /*En caso de ser el resultado de la validacion false entonces adsigno a la valiable
                    *result_valid el valor false a retorar */
                    case false: result_valid = false;
                        break;

                }

                switch (result_valid)
                {
                    case false:
                        var colactores = from a in ds_Actores
                                         where a.Actor != "No Asignado"
                                         select new { a.IdActor };

                        var coleval = (from e in ds_Evaluacion
                                       where e.IdIE == idie && e.IdMedicion == idmedicion
                                       select new { e.IdActor }).Distinct();

                        List<int> listactores = new List<int>();
                        List<int> listeval = new List<int>();
                        foreach (var c in colactores)
                        {
                            listactores.Add(c.IdActor);
                        }

                        foreach (var e in coleval)
                        {
                            listeval.Add(e.IdActor);
                        }

                        listactores.Sort();
                        listeval.Sort();

                        int[] faltan = new int[listactores.Count - listeval.Count];

                        if (listactores.Count != listeval.Count)
                        {
                            IEnumerable<int> query = (listactores.Count() > listeval.Count()) ? listactores.Except(listeval) : listeval.Except(listactores);
                            int contador = 0;
                            foreach (var q in query)
                            {
                                faltan[contador] = q;
                                contador++;
                            }
                        }

                        foreach (var item in faltan)
                        {
                            if (idactor == item)
                            {
                                result_valid = true;
                                break;
                            }
                        }
                        break;
                }

                this._error = "En la medicion actual ya existe una evaluacion para el actor seleccionado.";
                /*Retorno el valor de la variable que almacena el resultado de la validacion 
                 * realizada por el metodo presente o actual*/
                return result_valid;

            }
            /*En caso de presentarse algun tipo de Excepcion retorno un valor del tipo false
             */
            catch (Exception) { return false; }


        }

        //public bool ValidarActores(int ie, int actor, int idmedicion)
        //{
        //    return ValidarGrupo(ie, actor, idmedicion);
        //}

        /// <summary>
        /// Almacena los resultados obtenidos en la evaluacion presentada por un actor
        /// </summary>
        /// <param name="ResultadosByPre"></param>
        /// <param name="idie"></param>
        /// <param name="idactor"></param>
        /// <param name="idusuario"></param>
        /// <returns></returns>
        public bool Almacenar(object[,] ResultadosByPre, int idie, int idmedicion, int idactor, int idusuario, bool estado, int tipo)
        {
            try
            {
                int idevalinsert = RegistrarEvaluacion(idie, idmedicion, idactor, idusuario, estado, tipo);
                if (idevalinsert != 0)
                {
                    InsertarResultados(ResultadosByPre, idevalinsert);
                    //db.SubmitChanges();

                    return true;
                }
                else
                    return false;

            }
            catch (System.Exception) { return false; }
        }

        //protected int RecuperarIdEvaluacion()
        //{
        //    try
        //    {
        //        int idEvaluacion = (from e in db.Evaluacions
        //                            select e.IdEvaluacion).Max();

        //        return idEvaluacion;
        //    }
        //    catch (Exception) { return 0; }
        //}

        protected int RegistrarEvaluacion(int idie, int idmedicion, int idactor, int idusuario, bool estado, int tipo)
        {
            try
            {
                string query = "INSERT INTO dbo_Evaluacion (IdEvaluacion, IdIE, IdActor, Fecha, IdUsuario, IdEstado, IdMedicion, Create_) VALUES";

                cn.Conectar();
                var result = cn.Ejecutar("SELECT MAX(IDEVALUACION) FROM dbo_Evaluacion");

                int estado_i = 0;
                if (tipo == 1)
                {
                    #region Estado SE Deshabilitado
                    //switch (estado)
                    //{
                    //    case true:
                    //        objEvaluacion = new Evaluacion
                    //        {
                    //            IdActor = idactor,
                    //            IdSE = idie,
                    //            Fecha = DateTime.Now,
                    //            IdUsuario = idusuario,
                    //            IdMedicion = idmedicion,
                    //            IdEstado = 2
                    //        };
                    //        break;

                    //    case false:
                    //        objEvaluacion = new Evaluacion
                    //        {
                    //            IdActor = idactor,
                    //            IdSE = idie,
                    //            Fecha = DateTime.Now,
                    //            IdUsuario = idusuario,
                    //            IdMedicion = idmedicion,
                    //            IdEstado = 1
                    //        };
                    //        break;
                    //}
                    #endregion
                }
                else
                {
                    #region Estado IE
                    switch (estado)
                    {
                        case true:
                            estado_i = 2;

                            break;

                        case false:
                            estado_i = 1;
                            break;
                    }
                    if (estado_i != 0 && estado_i >= 0)
                        query = String.Format(query + " ({0} ,{1}, {2},'{3}', {4}, {5}, {6}, 1)", (Convert.ToInt32(result[0]) + 1).ToString(), idie, idactor, DateTime.Now.ToShortDateString(), idusuario, estado_i, idmedicion);
                    #endregion
                }
                cn.Conectar();
                cn.Ejecutar(query);
                _idEvaluacion = Get_Last_Id_Evaluacion();
                cn.Desconectar();

                return IdEvaluacion;
            }
            catch (Exception) { return 0; }
        }
        /// <summary>
        /// Ejecuta el proceso para inserción en la base de datos para una nueva medición
        /// </summary>
        /// <returns>Identificador de la medición que insertó</returns>
        public int CreateMedicion()
        {
            try
            {
                cn.Conectar();
                cn.Ejecutar("INSERT INTO dbo_Mediciones (FechaMedicion) VALUES (" + DateTime.Now.ToShortDateString() + ")");

                ArrayList objArrayList = cn.Ejecutar("SELECT MAX(IDMEDICION) FROM dbo_Mediciones");

                return Convert.ToInt32(objArrayList[0]);
            }
            catch (Exception)
            {
                return 0;
            }
        }
        #endregion


    }

}


